<test>
    <query>
        SELECT *
        FROM
        (
            SELECT
                RegionID,
                toDateTime(EventDate) AS date,
                count() AS quantity
            FROM test.hits
            GROUP BY
                RegionID,
                date
        ) AS regions
        ASOF LEFT JOIN
        (
            SELECT
                RegionID,
                EventTime
            FROM test.hits
        ) AS ids ON (regions.RegionID = ids.RegionID) AND (regions.date &lt; ids.EventTime)
    </query>

    <query>
        SELECT * FROM
        (
            SELECT
                toStartOfDay(now()) + INTERVAL (seconds_since_start_of_day % 86000) SECOND AS date,
                fingerprint % 50 as fingerprint,
                multiIf(browserId % 3 == 0, 'firefox', browserId % 3 == 1, 'edge', 'chrome') as browser
            FROM generateRandom('seconds_since_start_of_day UInt32, fingerprint UInt8, browserId UInt8') LIMIT 100000
        ) AS origins
        ASOF LEFT JOIN
        (
            SELECT
                toStartOfDay(now()) + INTERVAL (seconds_since_start_of_day % 86000) SECOND AS date,
                fingerprint % 50 as fingerprint,
                multiIf(language % 2 == 0, 'es', 'en') as lang
            FROM generateRandom('seconds_since_start_of_day UInt32, fingerprint UInt8, language UInt8') LIMIT 5000000
        ) AS visits
        ON (visits.fingerprint = origins.fingerprint AND visits.date &gt;= origins.date)
        FORMAT Null
    </query>

    <substitutions>
        <substitution>
            <name>num_unique_sessions</name>
            <values>
                <value>1000</value>
                <value>1000000</value>
            </values>
        </substitution>
        <substitution>
            <name>num_rows</name>
            <values>
                <value>1000000</value>
            </values>
        </substitution>
    </substitutions>

    <query>
        SELECT COUNT(*) AS count
        FROM
        (
            SELECT
                (number % {num_unique_sessions}) AS visitor_id,
                number AS id
            FROM system.numbers
            LIMIT {num_rows}
        ) AS sessions
        ASOF LEFT JOIN
        (
            SELECT
                (number % {num_unique_sessions}) AS visitor_id,
                number AS starting_session_id
            FROM system.numbers
            LIMIT {num_rows}
        ) AS visitors
        ON visitors.visitor_id = sessions.visitor_id AND visitors.starting_session_id &lt; sessions.id
    </query>
</test>
